<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>MyTechBook</title>
        
    <link rel="stylesheet" type="text/css" href="../../static/css/main.css">
</head>
<body>
<div class="navbar navbar-line">
    <div class="container">
        <div class="logo">
            
                MyTechBook
            
        </div>
        <input type="checkbox" id="idoc_nav" />
        <div class="menu_tree">
        <ul><li><a href="../../index.html">首页</a></li><li><a href="#"><span></span>前沿观察</a><ul><li><a href="../../html/前沿观察/ECMAScript 6入门.html">ECMAScript 6入门</a></li><li><a href="../../html/前沿观察/Immutable详解及React中实践.html">Immutable详解及React中实践</a></li><li class="active"><a href="../../html/前沿观察/Node.js MVC框架ThinkJS.html">Node.js MVC框架ThinkJS</a></li><li><a href="../../html/前沿观察/Nodejs 5.0.0版本.html">Nodejs 5.0.0版本</a></li><li><a href="../../html/前沿观察/关系型数据库PostgreSQL.html">关系型数据库PostgreSQL</a></li><li><a href="../../html/前沿观察/轻型MVVM框架Vue.js.html">轻型MVVM框架Vue.js</a></li><li><a href="../../html/前沿观察/基于nodejs的开发框架koa.html">基于nodejs的开发框架koa</a></li></ul></li><li><a href="#"><span></span>前端工程化</a><ul><li><a href="../../html/前端工程化/前端模板.html">前端模板</a></li><li><a href="../../html/前端工程化/性能优化和前端工程的爱恨情仇.html">性能优化和前端工程的爱恨情仇</a></li><li><a href="../../html/前端工程化/webpack入门及实践.html">webpack入门及实践</a></li><li><a href="../../html/前端工程化/前端工程化不完全装逼指南.html">前端工程化不完全装逼指南</a></li></ul></li><li><a href="#"><span></span>性能优化</a><ul><li><a href="../../html/性能优化/jshint代码质量检测.html">jshint代码质量检测</a></li><li><a href="../../html/性能优化/jshint配置说明.html">jshint配置说明</a></li><li><a href="../../html/性能优化/NC性能优化.html">NC性能优化</a></li><li><a href="../../html/性能优化/React编码规范.html">React编码规范</a></li><li><a href="../../html/性能优化/性能优化待办事项.html">性能优化待办事项</a></li><li><a href="../../html/性能优化/性能优化点总结.html">性能优化点总结</a></li></ul></li><li><a href="#"><span></span>技术分享</a><ul><li><a href="../../html/技术分享/React技术分享.html">React技术分享</a></li><li><a href="../../html/技术分享/学习Git.html">学习Git</a></li><li><a href="../../html/技术分享/面向对象.html">面向对象</a></li><li><a href="../../html/技术分享/Node.js知识详解.html">Node.js知识详解</a></li><li><a href="../../html/技术分享/2015年大前端技术年终总结.html">2015年大前端技术年终总结</a></li></ul></li><li><a href="#"><span></span>随想笔记</a><ul><li><a href="../../html/随想笔记/项目技术栈规划.html">项目技术栈规划</a></li><li><a href="../../html/随想笔记/笔试面试大纲.html">笔试面试大纲</a></li></ul></li><li><a href="../../html/CONTACT.html">CONTACT</a></li></ul>    
        </div>
        
        
        <div class="forkgithub"><a target="_blank" href="https://github.com/sujunming">fork on github</a></div>
        

        <section class="idoc_nav_btn">
            <label for="idoc_nav"><span></span></label>
        </section>
    </div>
    
</div>




<div class="container">

    <div class="page-toc">
        <ul><li><a href="#t0一款使用 ES6/7 特性全新开发的 Node.js MVC 框架ThinkJS">一款使用 ES6/7 特性全新开发的 Node.js MVC 框架ThinkJS</a><ul><li><a href="#t1特性">特性</a></li></ul></li></ul>
    </div>
    
    <div class="content markdown-body">
        <h1 id="t0&#x4E00;&#x6B3E;&#x4F7F;&#x7528; ES6/7 &#x7279;&#x6027;&#x5168;&#x65B0;&#x5F00;&#x53D1;&#x7684; Node.js MVC &#x6846;&#x67B6;ThinkJS">&#x4E00;&#x6B3E;&#x4F7F;&#x7528; ES6/7 &#x7279;&#x6027;&#x5168;&#x65B0;&#x5F00;&#x53D1;&#x7684; Node.js MVC &#x6846;&#x67B6;ThinkJS <a href="#t0&#x4E00;&#x6B3E;&#x4F7F;&#x7528; ES6/7 &#x7279;&#x6027;&#x5168;&#x65B0;&#x5F00;&#x53D1;&#x7684; Node.js MVC &#x6846;&#x67B6;ThinkJS"> # </a></h1>
<p>ThinkJS &#x662F;&#x4E00;&#x6B3E;&#x4F7F;&#x7528; ES6/7 &#x7279;&#x6027;&#x5168;&#x65B0;&#x5F00;&#x53D1;&#x7684; Node.js MVC &#x6846;&#x67B6;&#xFF0C;&#x4F7F;&#x7528; ES7 &#x4E2D;async/await&#xFF0C;&#x6216;&#x8005; ES6 &#x4E2D;&#x7684; */yield &#x7279;&#x6027;&#x5F7B;&#x5E95;&#x89E3;&#x51B3;&#x4E86; Node.js &#x4E2D;&#x5F02;&#x6B65;&#x5D4C;&#x5957;&#x7684;&#x95EE;&#x9898;&#x3002;&#x540C;&#x65F6;&#x5438;&#x6536;&#x4E86;&#x56FD;&#x5185;&#x5916;&#x4F17;&#x591A;&#x6846;&#x67B6;&#x7684;&#x8BBE;&#x8BA1;&#x7406;&#x5FF5;&#x548C;&#x601D;&#x60F3;&#xFF0C;&#x8BA9;&#x5F00;&#x53D1; Node.js &#x9879;&#x76EE;&#x66F4;&#x52A0;&#x7B80;&#x5355;&#x3001;&#x9AD8;&#x6548;&#x3002;</p>
<p>&#x4F7F;&#x7528; ES6/7 &#x7279;&#x6027;&#x6765;&#x5F00;&#x53D1;&#x9879;&#x76EE;&#x53EF;&#x4EE5;&#x5927;&#x5927;&#x63D0;&#x9AD8;&#x5F00;&#x53D1;&#x6548;&#x7387;&#xFF0C;&#x662F;&#x8D8B;&#x52BF;&#x6240;&#x5728;&#x3002;&#x5E76;&#x4E14;&#x65B0;&#x7248;&#x7684; Node.js &#x5BF9; ES6 &#x7279;&#x6027;&#x4E5F;&#x6709;&#x4E86;&#x8F83;&#x597D;&#x7684;&#x652F;&#x6301;&#xFF0C;&#x5373;&#x4F7F;&#x6709;&#x4E9B;&#x7279;&#x6027;&#x8FD8;&#x6CA1;&#x6709;&#x652F;&#x6301;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x501F;&#x52A9; Babel &#x7F16;&#x8BD1;&#x6765;&#x652F;&#x6301;&#x3002;</p>
<h2 id="t1&#x7279;&#x6027;">&#x7279;&#x6027; <a href="#t1&#x7279;&#x6027;"> # </a></h2>
<ul>
<li>&#x4F7F;&#x7528; ES6/7 &#x7279;&#x6027;&#x6765;&#x5F00;&#x53D1;&#x9879;&#x76EE;</li>
</ul>
<p>&#x501F;&#x52A9; Babel &#x7F16;&#x8BD1;&#xFF0C;&#x53EF;&#x4EE5;&#x5728;&#x9879;&#x76EE;&#x4E2D;&#x5927;&#x80C6;&#x4F7F;&#x7528; ES6/7 &#x6240;&#x6709;&#x7684;&#x7279;&#x6027;&#xFF0C;&#x65E0;&#x9700;&#x62C5;&#x5FC3;&#x54EA;&#x4E9B;&#x7279;&#x6027;&#x5F53;&#x524D;&#x7248;&#x672C;&#x4E0D;&#x652F;&#x6301;&#x3002;&#x5C24;&#x5176;&#x662F;&#x4F7F;&#x7528; async/await &#x6216;&#x8005; */yield &#x6765;&#x89E3;&#x51B3;&#x5F02;&#x6B65;&#x56DE;&#x8C03;&#x7684;&#x95EE;&#x9898;&#x3002;</p>
<pre><code>//user controller, home/controller/user.js
export default class extends think.controller.base {
  //login action
  async loginAction(self){
    //&#x5982;&#x679C;&#x662F;get&#x8BF7;&#x6C42;&#xFF0C;&#x76F4;&#x63A5;&#x663E;&#x793A;&#x767B;&#x5F55;&#x9875;&#x9762;
    if(this.isGet()){
      return this.display();
    }
    //&#x8FD9;&#x91CC;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;post&#x65B9;&#x6CD5;&#x83B7;&#x53D6;&#x6240;&#x6709;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x6570;&#x636E;&#x5DF2;&#x7ECF;&#x5728;logic&#x91CC;&#x505A;&#x4E86;&#x6821;&#x9A8C;
    let data = this.post();
    let md5 = think.md5(&quot;think_&quot; + data.pwd);
    //&#x7528;&#x6237;&#x540D;&#x548C;&#x52A0;&#x5BC6;&#x540E;&#x7684;&#x5BC6;&#x7801;&#x53BB;&#x5339;&#x914D;&#x6570;&#x636E;&#x5E93;&#x4E2D;&#x5BF9;&#x4E8E;&#x7684;&#x6761;&#x76EE;
    let result = await this.model(&quot;user&quot;).where({name: data.name, pwd: md5}).find();
    //&#x5982;&#x679C;&#x672A;&#x5339;&#x914D;&#x5230;&#x4EFB;&#x4F55;&#x6570;&#x636E;&#xFF0C;&#x8868;&#x793A;&#x7528;&#x6237;&#x540D;&#x6216;&#x8005;&#x5BC6;&#x7801;&#x9519;&#x8BEF;
    if(think.isEmpty(result)){
      return this.fail(&quot;login fail&quot;);
    }
    //&#x83B7;&#x53D6;&#x5230;&#x7528;&#x6237;&#x4FE1;&#x606F;&#x540E;&#xFF0C;&#x5C06;&#x7528;&#x6237;&#x4FE1;&#x606F;&#x5199;&#x5165;session
    await this.session(&quot;userInfo&quot;, result);
    return this.success();
  }
}
</code></pre><p>&#x4E0A;&#x9762;&#x7684;&#x4EE3;&#x7801;&#x6211;&#x4EEC;&#x4F7F;&#x7528;&#x4E86; ES6 &#x91CC;&#x7684; class, export, let &#x4EE5;&#x53CA; ES7 &#x91CC;&#x7684; async &#x548C; await &#x7B49;&#x7279;&#x6027;&#xFF0C;&#x867D;&#x7136;&#x67E5;&#x8BE2;&#x6570;&#x636E;&#x5E93;&#x548C;&#x5199;&#x5165; Session &#x90FD;&#x662F;&#x5F02;&#x6B65;&#x64CD;&#x4F5C;&#xFF0C;&#x4F46;&#x501F;&#x52A9; async/await&#xFF0C;&#x4EE3;&#x7801;&#x90FD;&#x662F;&#x540C;&#x6B65;&#x4E66;&#x5199;&#x7684;&#x3002;&#x6700;&#x540E;&#x4F7F;&#x7528; Babel &#x8FDB;&#x884C;&#x7F16;&#x8BD1;&#xFF0C;&#x5C31;&#x53EF;&#x4EE5;&#x7A33;&#x5B9A;&#x8FD0;&#x884C;&#x5728; Node.js &#x7684;&#x73AF;&#x5883;&#x4E2D;&#x4E86;&#x3002;</p>
<ul>
<li>&#x652F;&#x6301;&#x591A;&#x79CD;&#x9879;&#x76EE;&#x7ED3;&#x6784;&#x548C;&#x591A;&#x79CD;&#x9879;&#x76EE;&#x73AF;&#x5883;</li>
</ul>
<p>&#x9879;&#x76EE;&#x652F;&#x6301;&#x5355;&#x6A21;&#x5757;&#x6A21;&#x5F0F;&#x3001;&#x666E;&#x901A;&#x6A21;&#x5F0F;&#x3001;&#x5206;&#x6A21;&#x5757;&#x6A21;&#x5F0F;&#x7B49;&#x591A;&#x79CD;&#x9879;&#x76EE;&#x7ED3;&#x6784;&#xFF0C;&#x53EF;&#x4EE5;&#x6EE1;&#x8DB3;&#x5404;&#x79CD;&#x9879;&#x76EE;&#x590D;&#x6742;&#x5EA6;&#x7684;&#x5F00;&#x53D1;&#x3002;</p>
<p>&#x9ED8;&#x8BA4;&#x652F;&#x6301; development&#xFF0C;testing &#x548C; prodution 3 &#x79CD;&#x9879;&#x76EE;&#x73AF;&#x5883;&#xFF0C;&#x53EF;&#x4EE5;&#x5728;&#x4E0D;&#x540C;&#x7684;&#x9879;&#x76EE;&#x73AF;&#x5883;&#x4E0B;&#x8FDB;&#x884C;&#x4E0D;&#x540C;&#x7684;&#x914D;&#x7F6E;&#xFF0C;&#x6EE1;&#x8DB3;&#x5728;&#x4E0D;&#x540C;&#x73AF;&#x5883;&#x4E0B;&#x7684;&#x914D;&#x7F6E;&#x9700;&#x6C42;&#xFF0C;&#x540C;&#x65F6;&#x8FD8;&#x53EF;&#x4EE5;&#x57FA;&#x4E8E;&#x9879;&#x76EE;&#x9700;&#x8981;&#x8FDB;&#x884C;&#x6269;&#x5C55;&#x3002;</p>
<ul>
<li>&#x652F;&#x6301;&#x4E30;&#x5BCC;&#x7684;&#x6570;&#x636E;&#x5E93;</li>
</ul>
<p>ThinkJS &#x652F;&#x6301; mysql, mongodb, sqlite &#x7B49;&#x5E38;&#x89C1;&#x7684;&#x6570;&#x636E;&#x5E93;&#xFF0C;&#x5E76;&#x4E14;&#x5C01;&#x88C5;&#x4E86;&#x5F88;&#x591A;&#x64CD;&#x4F5C;&#x6570;&#x636E;&#x5E93;&#x7684;&#x63A5;&#x53E3;&#xFF0C;&#x65E0;&#x9700;&#x624B;&#x52A8;&#x62FC;&#x63A5; SQL &#x8BED;&#x53E5;&#xFF0C;&#x8FD8;&#x53EF;&#x4EE5;&#x81EA;&#x52A8;&#x9632;&#x6B62; SQL &#x6CE8;&#x5165;&#x7B49;&#x5B89;&#x5168;&#x6F0F;&#x6D1E;&#x3002;&#x540C;&#x65F6;&#x652F;&#x6301;&#x4E8B;&#x52A1;&#x3001;&#x5173;&#x8054;&#x6A21;&#x578B;&#x7B49;&#x9AD8;&#x7EA7;&#x529F;&#x80FD;&#x3002;</p>
<ul>
<li>&#x4EE3;&#x7801;&#x81EA;&#x52A8;&#x66F4;&#x65B0;</li>
</ul>
<p>ThinkJS &#x5185;&#x7F6E;&#x4E86;&#x4E00;&#x5957;&#x4EE3;&#x7801;&#x81EA;&#x52A8;&#x66F4;&#x65B0;&#x7684;&#x673A;&#x5236;&#xFF0C;&#x6587;&#x4EF6;&#x4FEE;&#x6539;&#x540E;&#x7ACB;&#x5373;&#x751F;&#x6548;&#xFF0C;&#x4E0D;&#x7528;&#x91CD;&#x542F; Node.js &#x670D;&#x52A1;&#xFF0C;&#x4E5F;&#x4E0D;&#x7528;&#x501F;&#x52A9;&#x7B2C;&#x4E09;&#x65B9;&#x6A21;&#x5757;&#x3002;</p>
<ul>
<li>&#x81EA;&#x52A8;&#x521B;&#x5EFA; REST &#x63A5;&#x53E3;</li>
</ul>
<p>&#x4F7F;&#x7528; thinkjs &#x547D;&#x4EE4;&#x53EF;&#x4EE5;&#x81EA;&#x52A8;&#x521B;&#x5EFA; REST &#x63A5;&#x53E3;&#xFF0C;&#x4E0D;&#x7528;&#x5199;&#x4EFB;&#x4F55;&#x7684;&#x4EE3;&#x7801;&#x5373;&#x53EF;&#x5B8C;&#x6210; REST API &#x7684;&#x5F00;&#x53D1;&#x3002;&#x5982;&#x679C;&#x60F3;&#x5728; REST &#x63A5;&#x53E3;&#x4E2D;&#x8FC7;&#x6EE4;&#x5B57;&#x6BB5;&#x6216;&#x8005;&#x8FDB;&#x884C;&#x6743;&#x9650;&#x6821;&#x9A8C;&#xFF0C;&#x4E5F;&#x5F88;&#x65B9;&#x4FBF;&#x5904;&#x7406;&#x3002;</p>
<ul>
<li>&#x652F;&#x6301;&#x591A;&#x79CD; WebSocket &#x5E93;</li>
</ul>
<p>ThinkJS &#x652F;&#x6301; socket.io&#xFF0C;sockjs &#x7B49;&#x5E38;&#x89C1;&#x7684; WebSocket &#x5E93;&#xFF0C;&#x5E76;&#x4E14;&#x5BF9;&#x8FD9;&#x4E9B;&#x5E93;&#x8FDB;&#x884C;&#x5305;&#x88C5;&#xFF0C;&#x62B9;&#x5E73;&#x5404;&#x4E2A;&#x5E93;&#x4E4B;&#x95F4;&#x63A5;&#x53E3;&#x8C03;&#x7528;&#x4E0A;&#x7684;&#x5DEE;&#x5F02;&#xFF0C;&#x7ED9;&#x5F00;&#x53D1;&#x8005;&#x4E00;&#x81F4;&#x7684;&#x4F53;&#x9A8C;&#x3002;</p>
<ul>
<li>&#x4E30;&#x5BCC;&#x7684;&#x6D4B;&#x8BD5;&#x7528;&#x4F8B;</li>
</ul>
<p>ThinkJS &#x542B;&#x6709; 1500+ &#x7684;&#x6D4B;&#x8BD5;&#x7528;&#x4F8B;&#xFF0C;&#x4EE3;&#x7801;&#x8986;&#x76D6;&#x7387;&#x8FBE;&#x5230; 95% &#xFF0C;&#x6BCF;&#x4E00;&#x6B21;&#x4FEE;&#x6539;&#x90FD;&#x6709;&#x5BF9;&#x5E94;&#x7684;&#x6D4B;&#x8BD5;&#x7528;&#x4F8B;&#x6765;&#x4FDD;&#x969C;&#x6846;&#x67B6;&#x529F;&#x80FD;&#x7684;&#x7A33;&#x5B9A;&#x3002;</p>
<ul>
<li>&#x652F;&#x6301;&#x547D;&#x4EE4;&#x884C;&#x8C03;&#x7528;&#x6267;&#x884C;&#x5B9A;&#x65F6;&#x4EFB;&#x52A1;</li>
</ul>
<p>ThinkJS &#x91CC;&#x7684; Action&#x9664;&#x4E86;&#x53EF;&#x4EE5;&#x54CD;&#x5E94;&#x7528;&#x6237;&#x7684;&#x8BF7;&#x6C42;&#xFF0C;&#x540C;&#x65F6;&#x652F;&#x6301;&#x5728;&#x547D;&#x4EE4;&#x884C;&#x4E0B;&#x8BBF;&#x95EE;&#xFF0C;&#x501F;&#x52A9;&#x8FD9;&#x5957;&#x673A;&#x5236;&#x5C31;&#x53EF;&#x4EE5;&#x5F88;&#x65B9;&#x4FBF;&#x7684;&#x6267;&#x884C;&#x5B9A;&#x65F6;&#x4EFB;&#x52A1;&#x3002;</p>
<ul>
<li>Hook &#x548C; Middleware</li>
</ul>
<p>ThinkJS &#x4F7F;&#x7528; Hook &#x548C; Middleware &#x673A;&#x5236;&#xFF0C;&#x53EF;&#x4EE5;&#x7075;&#x6D3B;&#x7684;&#x5BF9;&#x8BBF;&#x95EE;&#x8BF7;&#x6C42;&#x8FDB;&#x884C;&#x62E6;&#x622A;&#x5904;&#x7406;&#x3002;</p>
<ul>
<li>&#x8BE6;&#x7EC6;&#x7684;&#x65E5;&#x5FD7;</li>
</ul>
<p>ThinkJS &#x5185;&#x7F6E;&#x4E86;&#x8BE6;&#x7EC6;&#x7684;&#x65E5;&#x5FD7;&#x529F;&#x80FD;&#xFF0C;&#x53EF;&#x4EE5;&#x5F88;&#x65B9;&#x4FBF;&#x7684;&#x67E5;&#x770B;&#x5404;&#x79CD;&#x65E5;&#x5FD7;&#xFF0C;&#x65B9;&#x4FBF;&#x8FFD;&#x67E5;&#x95EE;&#x9898;&#x3002;</p>
<ul>
<li>HTTP &#x8BF7;&#x6C42;&#x65E5;&#x5FD7;</li>
</ul>
<pre><code>[2015-10-12 14:10:03] [HTTP] GET /favicon.ico 200 5ms
[2015-10-12 14:10:11] [HTTP] GET /zh-CN/doc.html 200 11ms
[2015-10-12 14:10:11] [HTTP] GET /static/css/reset.css 200 3ms
</code></pre><ul>
<li>Socket &#x8FDE;&#x63A5;&#x65E5;&#x5FD7;</li>
</ul>
<pre><code>[2015-10-12 14:13:54] [SOCKET] Connect mysql with mysql://root:root@127.0.0.1:3306
</code></pre><ul>
<li>&#x9519;&#x8BEF;&#x65E5;&#x5FD7;</li>
</ul>
<pre><code>[2015-10-12 14:15:32] [Error] Error: ER_ACCESS_DENIED_ERROR: Access denied for user &quot;root3&quot;@&quot;localhost&quot; (using password: YES)

[2015-10-12 14:16:12] [Error] Error: Address already in use, port:8360. http://www.thinkjs.org/doc/error.html#EADDRINUSE
</code></pre><ul>
<li>&#x4E30;&#x5BCC;&#x7684;&#x8DEF;&#x7531;&#x673A;&#x5236;</li>
</ul>
<p>ThinkJS &#x652F;&#x6301;&#x6B63;&#x5219;&#x8DEF;&#x7531;&#x3001;&#x89C4;&#x5219;&#x8DEF;&#x7531;&#x3001;&#x9759;&#x6001;&#x8DEF;&#x7531;&#x7B49;&#x591A;&#x79CD;&#x8DEF;&#x7531;&#x673A;&#x5236;&#xFF0C;&#x5E76;&#x4E14;&#x53EF;&#x4EE5;&#x57FA;&#x4E8E;&#x6A21;&#x5757;&#x6765;&#x8BBE;&#x7F6E;&#x3002;&#x53EF;&#x4EE5;&#x8BA9; URL &#x66F4;&#x52A0;&#x7B80;&#x6D01;&#x7684;&#x540C;&#x65F6;&#x53C8;&#x4E0D;&#x4E22;&#x5931;&#x6027;&#x80FD;&#x3002;</p>
<ul>
<li>&#x652F;&#x6301;&#x56FD;&#x9645;&#x5316;&#x548C;&#x591A;&#x4E3B;&#x9898;</li>
</ul>
<p>ThinkJS &#x4F7F;&#x7528;&#x5F88;&#x7B80;&#x5355;&#x7684;&#x65B9;&#x6CD5;&#x5C31;&#x53EF;&#x4EE5;&#x652F;&#x6301;&#x56FD;&#x9645;&#x5316;&#x548C;&#x591A;&#x4E3B;&#x9898;&#x7B49;&#x529F;&#x80FD;&#x3002;</p>
<ul>
<li><p>&#x4E0E;&#x5176;&#x4ED6;&#x6846;&#x67B6;&#x7684;&#x5BF9;&#x6BD4;</p>
</li>
<li><p>&#x4E0E; express/koa &#x5BF9;&#x6BD4;</p>
</li>
</ul>
<p>express/koa &#x662F; 2 &#x4E2A;&#x6BD4;&#x8F83;&#x7B80;&#x5355;&#x7684;&#x6846;&#x67B6;&#xFF0C;&#x6846;&#x67B6;&#x672C;&#x8EAB;&#x63D0;&#x4F9B;&#x7684;&#x529F;&#x80FD;&#x6BD4;&#x8F83;&#x7B80;&#x5355;&#xFF0C;&#x9879;&#x76EE;&#x4E2D;&#x9700;&#x8981;&#x501F;&#x52A9;&#x5927;&#x91CF;&#x7684;&#x7B2C;&#x4E09;&#x65B9;&#x63D2;&#x4EF6;&#x624D;&#x80FD;&#x5B8C;&#x6210;&#x9879;&#x76EE;&#x7684;&#x5F00;&#x53D1;&#xFF0C;&#x6240;&#x4EE5;&#x7075;&#x6D3B;&#x5EA6;&#x6BD4;&#x8F83;&#x9AD8;&#x3002;&#x4F46;&#x4F7F;&#x7528;&#x5F88;&#x591A;&#x7B2C;&#x4E09;&#x65B9;&#x7EC4;&#x4EF6;&#x4E00;&#x65B9;&#x4FBF;&#x63D0;&#x9AD8;&#x4E86;&#x9879;&#x76EE;&#x7684;&#x590D;&#x6742;&#x5EA6;&#xFF0C;&#x53E6;&#x4E00;&#x4E2A;&#x65B9;&#x4FBF;&#x7B2C;&#x4E09;&#x65B9;&#x63D2;&#x4EF6;&#x8D28;&#x91CF;&#x53C2;&#x5DEE;&#x4E0D;&#x9F50;&#xFF0C;&#x4E5F;&#x4F1A;&#x5E26;&#x6765;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;&#x7B49;&#x98CE;&#x9669;&#x3002;</p>
<p>koa &#x4F7F;&#x7528; ES6 &#x91CC;&#x7684; <em>/yield &#x89E3;&#x51B3;&#x4E86;&#x5F02;&#x6B65;&#x56DE;&#x8C03;&#x7684;&#x95EE;&#x9898;&#xFF0C;&#x4F46; </em>/yield &#x53EA;&#x4F1A;&#x662F;&#x4E2A;&#x8FC7;&#x6E21;&#x89E3;&#x51B3;&#x65B9;&#x6848;&#xFF0C;&#x4F1A;&#x88AB; ES7 &#x91CC;&#x7684; async/await &#x6240;&#x66FF;&#x4EE3;&#x3002;</p>
<p>&#x800C; ThinkJS &#x63D0;&#x4F9B;&#x4E86;&#x6574;&#x5957;&#x89E3;&#x51B3;&#x65B9;&#x6848;&#xFF0C;&#x6BCF;&#x4E2A;&#x529F;&#x80FD;&#x90FD;&#x7ECF;&#x8FC7;&#x4E86;&#x4E25;&#x683C;&#x7684;&#x6027;&#x80FD;&#x548C;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;&#x7B49;&#x65B9;&#x9762;&#x7684;&#x6D4B;&#x8BD5;&#xFF0C;&#x5E76;&#x4E14;&#x5728;&#x9879;&#x76EE;&#x4E2D;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x4F7F;&#x7528; ES6/7 &#x6240;&#x6709;&#x7684;&#x7279;&#x6027;&#x3002;</p>
<ol>
<li>&#x4E0E; sails &#x5BF9;&#x6BD4;</li>
</ol>
<p>sails &#x4E5F;&#x662F;&#x4E00;&#x4E2A;&#x63D0;&#x4F9B;&#x6574;&#x5957;&#x89E3;&#x51B3;&#x65B9;&#x6848;&#x7684; Node.js &#x6846;&#x67B6;&#xFF0C;&#x5BF9;&#x6570;&#x636E;&#x5E93;&#x3001;REST API&#x3001;&#x5B89;&#x5168;&#x65B9;&#x9762;&#x4E5F;&#x5F88;&#x591A;&#x5C01;&#x88C5;&#xFF0C;&#x4F7F;&#x7528;&#x8D77;&#x6765;&#x6BD4;&#x8F83;&#x65B9;&#x4FBF;&#x3002;</p>
<p>&#x4F46; sails &#x5BF9;&#x5F02;&#x6B65;&#x56DE;&#x8C03;&#x7684;&#x95EE;&#x9898;&#x8FD8;&#x6CA1;&#x6709;&#x4F18;&#x5316;&#xFF0C;&#x8FD8;&#x662F;&#x4F7F;&#x7528; callback &#x7684;&#x65B9;&#x5F0F;&#xFF0C;&#x7ED9;&#x5F00;&#x53D1;&#x5E26;&#x6765;&#x5F88;&#x5927;&#x7684;&#x4E0D;&#x4FBF;&#xFF0C;&#x5BFC;&#x81F4;&#x9879;&#x76EE;&#x4E2D;&#x65E0;&#x6CD5;&#x8F83;&#x597D;&#x7684;&#x4F7F;&#x7528; ES6/7 &#x7279;&#x6027;&#x3002;</p>
<ul>
<li>ThinkJS &#x7684;&#x4E0D;&#x8DB3;</li>
</ul>
<p>&#x4E0A;&#x9762;&#x8BF4;&#x4E86;&#x5F88;&#x591A; ThinkJS &#x7684;&#x4F18;&#x70B9;&#xFF0C;&#x5F53;&#x7136; ThinkJS &#x4E5F;&#x6709;&#x5F88;&#x591A;&#x7684;&#x4E0D;&#x8DB3;&#x3002;&#x5982;&#xFF1A;</p>
<ol>
<li>&#x6846;&#x67B6;&#x8FD8;&#x6BD4;&#x8F83;&#x65B0;&#xFF0C;&#x7F3A;&#x5C11;&#x793E;&#x533A;&#x7B49;&#x65B9;&#x9762;&#x7684;&#x652F;&#x6301;</li>
<li>&#x8FD8;&#x6CA1;&#x6709;&#x7ECF;&#x8FC7;&#x8D85;&#x5927;&#x578B;&#x9879;&#x76EE;&#x7684;&#x68C0;&#x9A8C;</li>
</ol>

        <div class="copyright">Powered by <a href="https://github.com/jaywcjlove/idoc" target="_blank">idoc</a>. Dependence <a href="https://nodejs.org">Node.js</a> run.</div>
    </div>

</div>


</body>
</html>
